#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
//定义链式二叉树
//二叉树节点结构
typedef char BTDataType;
typedef struct BinaryTreeNode{
BTDataType x;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;
void preOrder(BTNode* root);
void inOrder(BTNode* root);
void postOrder(BTNode* root);
BTNode* BuyNode(char val);
// ⼆叉树结点个数 
int BinaryTreeSize(BTNode* root); 
// ⼆叉树叶⼦结点个数 
int BinaryTreeLeafSize(BTNode* root); 
// ⼆叉树第k层结点个数 
int BinaryTreeLevelKSize(BTNode* root, int k); 
//⼆叉树的深度/⾼度
int BinaryTreeDepth(BTNode* root);
// ⼆叉树查找值为x的结点 
BTNode* BinaryTreeFind(BTNode* root, BTDataType m);
// ⼆叉树销毁
void BinaryTreeDestory(BTNode** root);
//层序遍历（借助队列）
void LevelOrder(BTNode* root);
//判断是否为完全二叉树
bool BinaryTreeComplete(BTNode* root);
//是否树中所有值都相等
bool isUnivalTree(BTNode* root);
//检查两棵树是否相等
bool isSameTree(BTNode* p, BTNode* q);
//是否是对称树
bool isSymmetric(BTNode* root) ;
//判断一棵树是否是另一棵树的子树
bool isSubtree(BTNode* root,BTNode* subRoot);
//
BTNode* creatTree(char* arr,int* pi);

int* postorderTraversal(BTNode* root, int* returnSize);

void post(BTNode* root,int* arr,int* pi);
